///////////////////////////////////////////////////////////////////////////////
/// Line.java
/// Author : Alper UNGOR
/// Last Updated: Wed Apr 30 15:35
///////////////////////////////////////////////////////////////////////////////

import java.applet.Applet;

public class Cell extends Applet {

  // Each node of the doubly linked list is represented by a cell
  // Each cell contains an index to the point
  public int point;

  // Each cell also contains an index of the next edge
  public int edge;

  // Pointers to link in each direction
  public Cell next;
  public Cell prev;

  ///////////////////////////////////////////////////////////////////////
  // Cell: is the constructor
  ///////////////////////////////////////////////////////////////////////
  public  Cell(int p, int e){
    point = p;
    edge = e;
    next = this;
    prev = this;
  }

  ///////////////////////////////////////////////////////////////////////
  // Cell: copy constructor
  ///////////////////////////////////////////////////////////////////////
  public Cell(Cell a) {
    point = a.point;
    edge = a.edge;
    next = a.next;
    prev = a.prev;
  }

  ///////////////////////////////////////////////////////////////////////
  // insert: links a given cell to right after this cell
  ///////////////////////////////////////////////////////////////////////
  public void insert(Cell newcell) {
    Cell temp = next;
    newcell.next = temp;
    newcell.prev = this;
    next = newcell;
    temp.prev = newcell;
  }

  ///////////////////////////////////////////////////////////////////////
  // insert: links a given cell to right after this cell.
  //         It also names the edge link with the given edge index.
  ///////////////////////////////////////////////////////////////////////
  public void insert(Cell newcell, int e) {
    Cell temp = next;
    newcell.next = temp;
    newcell.prev = this;
    next = newcell;
    temp.prev = newcell;
    edge = e;
  }

  ///////////////////////////////////////////////////////////////////////
  // remove: removes this cell connecting the prev to next.
  ///////////////////////////////////////////////////////////////////////
  public void remove() {
    prev.next = next;
    next.prev = prev;
    next = null;
    prev = null;
  }

  ///////////////////////////////////////////////////////////////////////
  // get_next: is an access function, returns the next Cell.
  ///////////////////////////////////////////////////////////////////////
  public Cell get_next() {
    return next;
  }

  ///////////////////////////////////////////////////////////////////////
  // get_point: is an access function, returns the index of the point
  ///////////////////////////////////////////////////////////////////////
  public int get_point() {
    return point;
  }

  ///////////////////////////////////////////////////////////////////////
  // set_next: sets the next Cell.
  ///////////////////////////////////////////////////////////////////////
  public void set_next(Cell newnext) {
    next = newnext;
  }

  ///////////////////////////////////////////////////////////////////////
  // set_point: sets the point.
  ///////////////////////////////////////////////////////////////////////
  public void set_point(int newpoint) {
    point = newpoint;
  }

}

